package com.example.demo.demo3.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerCommunicator {

    // 声明本地服务器名称
    private static final String SERVER_HOST = "localhost";
    // 声明本地端口号
    private static final int SERVER_PORT = 8888;

    // 创建发送数据到服务器的方法，并且有两个形参，一个是数据，一个是客户端画面
    public void sendDataToServer(String data, ClientUI clientUI) {
        try (Socket socket = new Socket(SERVER_HOST, SERVER_PORT); // 初始化套接字，并把本地服务器名称和端口号传入
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 以套接字的形式发送数据，并实时刷新
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) // 获取数据
        {
            // 发送数据
            out.println(data);
            // 声明第三方参数依次获取信息
            String response = in.readLine();
            // 非空判断
            if (response != null) {
                // 从服务端获取的信息，展示在客户端文本域中
                clientUI.getOutputArea().appendText("服务端响应：" + response + "\n");
                // 调用解析和展示响应数据的方法
                parseAndDisplayResponse(response, clientUI);
            }
        } catch (IOException e) {
            // 当连接服务端失败，会在多行文本组件中显示信息
            clientUI.getOutputArea().appendText("连接服务端失败：" + e.getMessage() + "\n");
        }
    }

    // 创建解析和展示响应数据的方法
    private void parseAndDisplayResponse(String response, ClientUI clientUI) {
        // 以'、'的方式分割数据
        String[] parts = response.split("、");
        if (parts.length == 3) {
            clientUI.getReceivedBarcodeLabel().setText("接收到的单号: " + parts[0]);
            clientUI.getReceivedWeightLabel().setText("接收到的重量：" + parts[1]);
            clientUI.getReceivedVolumeLabel().setText("接收到的体积：" + parts[2]);
        }
    }
}